package jdklearn.collectionAndMap.conllection.set;

import org.junit.Test;

import java.util.HashSet;

/**
 * author Veng Su
 * email  1344114844@qq.com
 * date   18-9-1 下午2:21
 */
//如果需要把某个类的对象保存到HashSet集合中，我们在重写这个类的equlas()方法和hashCode()方法时，
// 应该尽量保证两个对象通过equals()方法比较返回true时，它们的hashCode()方法返回值也相等
public class TestHashSet {

    //类A的equals方法总是返回true,但没有重写其hashCode()方法。不能保证当前对象是HashSet中的唯一对象
    class A {
        public boolean equals(Object obj) {
            return true;
        }
    }

    //类B的hashCode()方法总是返回1,但没有重写其equals()方法。不能保证当前对象是HashSet中的唯一对象
    class B {
        public int hashCode() {
            return 1;
        }
    }

    //类C的hashCode()方法总是返回2,且有重写其equals()方法
    class C {
        public int hashCode() {
            return 2;
        }

        public boolean equals(Object obj) {
            return true;
        }
    }

    @Test
    public void test() {
        HashSet books = new HashSet();
        //分别向books集合中添加两个A对象，两个B对象，两个C对象
        books.add(new A());
        books.add(new A());

        books.add(new B());
        books.add(new B());

        books.add(new C());
        books.add(new C());
        System.out.println(books);
    }
}
